/**
 ************************************************************************************************
 * 											mls test											*
 ************************************************************************************************
 * 
 * Just a little test file for the Maximum Length Sequence generation algorithm
 * 
 * Copyright (c) 2014, Aaron L. Jones
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without modification, are permitted 
 * provided that the following conditions are met:
 * 
 * 1. Redistributions of source code must retain the above copyright notice, this list of 
 * conditions and the following disclaimer in the documentation and/or other materials 
 * provided with the distribution.
 * 
 * 2. Redistributions in binary form must reproduce the above copyright notice, this list of 
 * conditions and the following disclaimer in the documentation and/or other materials provided 
 * with the distribution.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
 * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 
 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
**/

#include "stdio.h"
#include "stdint.h"

#define PR_NOISE_LSB_MASK	0x1					/* mask to isolate LSB */
#define WTS_OSC_BIT_DEPTH		(4)
#define PR_NOISE_LFSR_INIT		(0x0001)		/* linear feedback shift register initial state */


int main(int argc, char** argv)
{
	
	uint32_t ii;
	
	uint32_t shift_reg = PR_NOISE_LFSR_INIT;
	
	uint32_t framect = 16;
	
	for(ii=0; ii<framect; ii++)
	{
		printf("%X\n",shift_reg);
		
		shift_reg |= ( ( (shift_reg ^ (shift_reg >> 1) ) & PR_NOISE_LSB_MASK ) << WTS_OSC_BIT_DEPTH );
		
		shift_reg >>= 1;
	}
	
	return(0);
}
